package com.navicoa.e_libreria.presentacion;

import com.navicoa.e_libreria.datos.TOUsuario;
import com.navicoa.e_libreria.logica.usuario.Credencial;
import com.navicoa.e_libreria.presentacion.secciones.Inicio;
import com.navicoa.e_libreria.utiles.Reloj;
import com.vaadin.Application;
import com.vaadin.terminal.Sizeable;
import com.vaadin.ui.AbsoluteLayout;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.ProgressIndicator;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.VerticalSplitPanel;
import com.vaadin.ui.themes.BaseTheme;

public class VistaMain extends AbsoluteLayout{

	private Class<?> claseLogin = VistaLogin.class;
	
	private Label l2;
	private Label l3;
	private Label l4;

	private final Button etiquetaL2 = new Button("Empleado: ");
	private final String descripcion_L2 = "Click para Salir de Sesion";
	private final String etiquetaL3 = "Cargo: ";
	private final String etiquetaL4 = "Sevilla a ";
	private final String etiquetaL1 = "Bienvenido a e-Libreria";

	private final VerticalSplitPanel tapizCabecera = new VerticalSplitPanel();
	private final VerticalSplitPanel tapizMain = new VerticalSplitPanel();
	
	private final Application a;
	private Class<?> claseSeccionInicio = Inicio.class;
	
	HorizontalLayout hL = new HorizontalLayout();
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	public void setHora(){
		l4.setValue(etiquetaL4 + new java.util.Date());
	}
	
	public VerticalSplitPanel getTapiz(){
		return tapizMain;
	}
	
	public VistaMain(Application a){
		super();

		this.a = a;
		
		this.setImmediate(false);
		this.setWidth("100%");
		this.setHeight("100%");
		this.setMargin(false);
		
		this.addComponent(buildVerticalSplitPanel1());	
		
		//Reloj en un hilo diferente
		@SuppressWarnings("unused")
		Reloj r = new Reloj(this);
		
		//Ayuda a Actualizar la pagina cada segundo y refrescar los elementos
		ProgressIndicator indicator = new ProgressIndicator(new Float(0.0));
		indicator.addStyleName("actualizador");
		indicator.setPollingInterval(1000);
		
		this.addComponent(indicator);
	}
	
	public void setMain(ComponentContainer c){
		tapizMain.setSecondComponent(c);
	}

	private VerticalSplitPanel buildVerticalSplitPanel1() {
		tapizCabecera.setImmediate(false);
		tapizCabecera.setWidth("100.0%");
		tapizCabecera.setHeight("100.0%");
		tapizCabecera.setMargin(false);

		tapizCabecera.setSplitPosition(70, Sizeable.UNITS_PIXELS);
		
		tapizCabecera.setLocked(true);
		
		tapizCabecera.addComponent(buildCabezera());
		tapizCabecera.addComponent(buildMain());
		
		return tapizCabecera;
	}

	private VerticalSplitPanel buildMain() {
		tapizMain.setImmediate(false);
		tapizMain.setWidth("100.0%");
		tapizMain.setHeight("100.0%");
		tapizMain.setMargin(false);
		
		tapizMain.setStyleName("tapizMain");

		tapizMain.setSplitPosition(23, Sizeable.UNITS_PIXELS);
		
		tapizMain.setLocked(true);
		
		tapizMain.addComponent(new Menu(this));
		
		try {
			tapizMain.addComponent((ComponentContainer) claseSeccionInicio.newInstance());
		} catch (InstantiationException e) {
			// TODO Bloque catch generado automáticamente
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Bloque catch generado automáticamente
			e.printStackTrace();
		} //Instanciar directamente el inicio
		
		return tapizMain;
	}

	private Component buildCabezera() {		
		hL.setImmediate(false);
		hL.setWidth("100.0%");
		hL.setMargin(false);
		
		hL.addStyleName("horizontalCabezera");
		
		Label l1 = new Label(etiquetaL1);
		l1.addStyleName("l1");
		
		VerticalLayout v1 = new VerticalLayout();
		v1.addStyleName("v1");
		
		v1.setImmediate(false);
		v1.setWidth("100%");
		v1.setMargin(false);
		
		TOUsuario u = ((Credencial)a.getUser()).getUsuario();
		
		l2 = new Label();
		l2.setValue(u.getNombre() + " " + u.getApellidos());
		l2.addStyleName("l2");
		l3 = new Label(etiquetaL3 + "Administrador");
		l4 = new Label(etiquetaL4 + (new java.util.Date()));
		
		HorizontalLayout empleado = new HorizontalLayout();
		empleado.addComponent(etiquetaL2);
		empleado.addComponent(l2);
		
		etiquetaL2.setStyleName(BaseTheme.BUTTON_LINK);
		etiquetaL2.setDescription(descripcion_L2);
		
		etiquetaL2.addListener(new ClickListener(){

			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			public void buttonClick(ClickEvent event) {
				try {
					((InicioAplicacion) getApplication()).setMain((AbsoluteLayout) claseLogin.newInstance());
				} catch (InstantiationException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				}			
			}
			
		});

		v1.addComponent(empleado);
		v1.setComponentAlignment(empleado, Alignment.MIDDLE_CENTER);
		v1.addComponent(l3);
		v1.setComponentAlignment(l3, Alignment.MIDDLE_CENTER);
		
		hL.addComponent(l1);
		hL.addComponent(v1);
		hL.addComponent(l4);
		hL.setComponentAlignment(l4, Alignment.MIDDLE_CENTER);
		
		return hL;
	}
}
